Skip to content

feat: Emily avatar + Hermes Remote health check in info panel - #56

Merged
alrobles merged 2 commits into
mainfrom
devin/1779659322-emily-avatar-phase2
May 24, 2026
Merged

feat: Emily avatar + Hermes Remote health check in info panel#56
alrobles merged 2 commits into
mainfrom
devin/1779659322-emily-avatar-phase2

Conversation

@alrobles

Copy link
Copy Markdown
Owner

Summary

Two features in one PR:

1. Emily Avatar

Adds the user-provided Emily character image (ecological scientist in green lab coat) to the frontend:

  • Login screen — 96px avatar below the EcoSeek logo
  • Chat messages — 28px circular avatar next to "Emily" name on agent responses
  • Loading indicator — avatar next to "Emily is thinking..."
  • Image cropped with transparent background so it works on both light and dark themes

2. Hermes Remote Health Check

Adds real-time connectivity monitoring to hermes.ecoseek.org (reumanlab) in the info panel:

  • Polls https://hermes.ecoseek.org/health every 15 seconds
  • Shows Connected/Disconnected status with green/red indicator
  • Shows platform info when connected
  • Info panel split into three sections: Emily Local | Hermes Remote (reumanlab) | Auth

This makes it easy to verify at a glance that both the local Emily agent and the remote Hermes Beta are running.

Review & Testing Checklist for Human

  • Rebuild Docker: docker stop emily-local ecoseek-frontend && docker rm emily-local ecoseek-frontend && docker rmi ecoseek-frontend && git pull && DEEPSEEK_API_KEY=sk-... bash emily-start.sh
  • Verify Emily avatar appears on login screen (circular, below EcoSeek logo)
  • Login, verify avatar appears next to "Emily" label on agent messages
  • Check info panel shows Hermes Remote (reumanlab) section with "Connected" status (green)
  • Verify avatar has transparent background (works on both light/dark theme)

Notes

  • The remote health check uses REACT_APP_HERMES_REMOTE_URL env var, defaulting to https://hermes.ecoseek.org
  • Confirmed that hermes.ecoseek.org responds correctly with the ecoseek plugin loaded (v0.3.0, all 4 DiDAL tools)

Link to Devin session: https://app.devin.ai/sessions/6e7495b7d2e2416ba3f9626d6dcb9a2e
Requested by: @alrobles

alrobles added 2 commits May 24, 2026 21:49
- Crop transparent-background avatar from user-provided image
- Show avatar next to Emily's name in agent messages
- Show avatar in 'Emily is thinking...' loading indicator
- Show avatar on login screen below EcoSeek logo
- Multiple sizes: 48px, 96px, 200px + full-size for public/
- Split Connection section into Emily Local + Hermes Remote + Auth
- Poll hermes.ecoseek.org/health every 15s
- Show platform info when remote is connected
- Export HERMES_REMOTE_URL for future use
@devin-ai-integration

Copy link
Copy Markdown
Contributor

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

⚙️ Control Options:

  • Disable automatic comment and CI monitoring

@devin-ai-integration

Copy link
Copy Markdown
Contributor

Test Results — PR #56 (Emily Avatar + Hermes Remote Health Check)

6/7 tests passed, 1 failed (CORS bug)

Devin Session | Tested via Docker containers + Playwright CDP auth bypass

Avatar + Info Panel Tests (6 passed)
Test Result
Login screen avatar (96px circular, transparent bg)
Login layout + footer text
Loading indicator avatar ("Emily is thinking...")
Agent message avatar (28px + name + Reasoning toggle)
Three-section info panel (Emily Local / Hermes Remote / Auth)
Emily Local status = Connected (green)
Auth section (broker.ecoseek.org, Emily Local + Hermes Remote)
Light/dark theme compatibility
🔴 CORS Bug — Hermes Remote Health Check (1 failed)

checkRemoteHealth() fetches https://hermes.ecoseek.org/health from the browser. The Hermes gateway does not serve Access-Control-Allow-Origin headers, so the browser blocks the request:

Access to fetch at https://hermes.ecoseek.org/health from origin http://localhost:4000 has been blocked by CORS policy

Result: "Hermes Remote" section always shows Disconnected (red) even though curl https://hermes.ecoseek.org/health returns {"status":"ok"}.

Fix options:

  1. Add CORS headers to Hermes gateway config on reumanlab
  2. Proxy the health check through Emily local backend (/api/remote-health)
  3. Use no-cors mode (but then cannot read response body)
Testing Methodology
  • Environment: Docker containers (emily-local:8642, ecoseek-frontend:4000), no DEEPSEEK_API_KEY
  • Auth bypass: Playwright CDP + window.fetch override to simulate authenticated session and mock agent responses
  • Login screen: Tested unauthenticated view directly
  • Agent message: Intercepted chatCompletion() to return fake response with reasoning content
  • Theme: Toggled between dark/light via theme toggle button
  • CORS: Verified via browser DevTools console + curl -sv -X OPTIONS from CLI
Notes
  • Without DEEPSEEK_API_KEY, Emily returns "No inference provider configured" — expected, not a bug
  • Error messages correctly render without Emily avatar (red bg, no avatar prefix)
  • Agent messages correctly render with Emily avatar + "Emily" label + optional Reasoning toggle
  • The hermes.ecoseek.org endpoint is healthy and responds correctly to curl — only browser CORS is the issue

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant